package com.qf.service.impl;


import com.qf.dao.CartDao;
import com.qf.dao.impl.CartDaoImpl;
import com.qf.service.CartService;
import com.qf.service.GoodsService;
import com.qf.pojo.CartDto;
import com.qf.pojo.TbCart;
import com.qf.pojo.TbGoods;

import java.util.ArrayList;
import java.util.List;

/**
 * Create by 周志豪 on 2022/8/21  10:45
 *
 * @authoe 周志豪
 * @veision 1.0
 * //TODO  想好了再去做
 * @since 1.0
 */

public class CartServiceImpl implements CartService {

    private CartDao cartDao = new CartDaoImpl();
    private GoodsService goodsService = new GoodsServiceImpl();

    @Override
    public void upsert(Long goodId, Long userId) {
        //首先得先用这两个id查询一下数据存在与否
        TbCart tbCart = cartDao.findByUserIdAndGoodId(userId, goodId);
        //不存在就是插入一条新的数据
        if (tbCart == null) {
            cartDao.addCart(userId, goodId, 1);
        } else {
            //如果存在就是更新数量
            cartDao.updateCount(userId, goodId, 1);
        }

    }

    @Override
    public CartDto findCartGoodsByUserId(Long userId) {
        //先根据用户的id查询购物车中的所有的商品的id
        List<TbCart> carts = cartDao.findByUserId(userId);
        //保存有每一个商品数量的数组
        long[] nums = new long[carts.size()];

        List ids = new ArrayList();
        for (int i = 0; i < carts.size(); i++) {

            //保存查询条件
            ids.add(carts.get(i).getPid());
            //将数量保存到数组中
            nums[i] = carts.get(i).getNum();
        }


        //获取到所有的商品的id,然后作为查询条件查询商品
        // List<Long> ids = carts.stream().map(TbCart::getId).collect(Collectors.toList());
        //List<TbGoods> goodsList = goodsService.findByIds(carts.stream().map(TbCart::getPid).collect(Collectors.toList()));
        List<TbGoods> goodsList = goodsService.findByIds(ids);
        //返回给前端的封装的数据对象
        CartDto cartDto = new CartDto();
        cartDto.setGoodsList(goodsList);
        //设置数量的数组
        cartDto.setNums(nums);
        //返回了封装有商品和对应数量的一个对象
        return cartDto;
    }
}
